package leetcode.list;

import utils.node.ListNode;

/**
 * DESCRIPTION:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/
 * 存在一个按升序排列的链表，给你这个链表的头节点 head ，请你删除所有重复的元素，使每个元素 只出现一次 。
 * 返回同样按升序排列的结果链表。
 *
 * Author: ammar
 * Date:   2021/12/11
 * Time:   下午2:02
 */
public class _83_删除排序链表中的重复元素 {

    public static void main(String[] args) {
        Integer[] integers = {1,1,1,1};
        ListNode listNode = Tools.generList(integers);
        ListNode node = deleteDuplicates(listNode);
        System.out.println(node);
    }

    /**
     * 思路：创建变量保存遍历链表的上一个元素 n-1
     * 判断 n 节点的树脂与 n-1 节点的数值是否相等
     * 相等则将 n-1 -> n+1
     * @param head
     * @return
     */
    public static ListNode deleteDuplicates(ListNode head) {
        ListNode prev = null;
        ListNode temp = head;
        while (temp != null) {
            if (prev != null && prev.val == temp.val) {
                if (temp.next == null) {
                    prev.next = null;
                    break;
                }
                prev.next = temp.next;
                temp = temp.next;
                continue;
            }
            prev = temp;
            temp = temp.next;
        }
        return head;
    }
}
